using Savaged.Info.EnumToString;
using Savaged.Info.Models;
namespace Savaged.Info.Console
{
class Program
{
static void Main(string[] args)
{
var payment = new Payment() { StatusID = 3 };
System.Console.WriteLine("Status ID:{0} as Enum {1} and as String '{2}'.",
payment.StatusID, (PayRecs)payment.StatusID, payment.Comment);
System.Console.ReadKey();
}
}
}
namespace Savaged.Info.EnumToString
{
public enum PayRecs
{
_,
PayInFull,
PartPay,
WithholdInFull,
Logged,
Accept,
WrittenOff,
ReferToFinance,
DoNotAccept,
CopyForInfo,
PayRec,
Closed
}
public static class PayRecsExtensions
{
public static string Text(this PayRecs payRec)
{
var value = string.Empty;
switch (payRec)
{
case PayRecs.PayInFull:
value = "Pay in full.";
break;
case PayRecs.PartPay:
value = "Part pay.";
break;
case PayRecs.WithholdInFull:
value = "Withhold in full.";
break;
case PayRecs.Logged:
value = "Logged for action.";
break;
case PayRecs.Accept:
value = "Accept in full.";
break;
case PayRecs.WrittenOff:
value = "Amount written off.";
break;
case PayRecs.ReferToFinance:
value = "Refer to Finance.";
break;
case PayRecs.DoNotAccept:
value = "Do not accept.";
break;
case PayRecs.CopyForInfo:
value = "Copy for info.";
break;
case PayRecs.PayRec:
value = "Payment recommendation.";
break;
case PayRecs.Closed:
value = "Closed.";
break;
}
return value;
}
}
}
namespace Savaged.Info.Models
{
public class Payment
{
private int _statusId;
private decimal _demanded;
private decimal _demandedVAT;
private decimal _recommended;
private decimal _recommendedVAT;
public Payment()
{
// Logic for setting fields like demanded
_demanded = 1234.56M;
_demandedVAT = _demanded * 0.2M;
}
public int StatusID
{
get => _statusId;
set
{
_statusId = value;
switch (value)
{
case (int)PayRecs.PayInFull:
case (int)PayRecs.Accept:
_recommended = _demanded;
_recommendedVAT = _demandedVAT;
break;
case (int)PayRecs.DoNotAccept:
case (int)PayRecs.Logged:
case (int)PayRecs.WithholdInFull:
_recommended = 0;
_recommendedVAT = 0;
break;
}
if (string.IsNullOrEmpty(Comment))
{
Comment = ((PayRecs)value).Text();
}
}
}
public string Comment { get; set; }
}
}